import asyncio
import os

from agents import (
    Agent,
    RunConfig,
    Runner,
    function_tool,
    set_tracing_disabled,
)
from dotenv import load_dotenv

from model_providers.deepseek import DeepSeekModelProvider

# 1-环境变量加载相关
load_dotenv()
BASE_URL = os.getenv("BASE_URL") or ""
API_KEY = os.getenv("API_KEY") or ""
MODEL_NAME = os.getenv("MODEL_NAME") or ""
if not BASE_URL or not API_KEY or not MODEL_NAME:
    raise ValueError(
        "请通过环境变量或代码设置EXAMPLE_BASE_URL、EXAMPLE_API_KEY、EXAMPLE_MODEL_NAME。"
    )

# 2-跳过大模型的链路追踪
set_tracing_disabled(disabled=True)

"""
本例使用自定义提供程序调用Runner.run()的部分，并直接调用OpenAI进行其他操作。
步骤：
1. 【实例化LLM】ModelProvider对象-并构建RunConfig
2. 【实例化Agent】创建一个Agent。
3. 在调用Runner.run()结合【LLM】+【Agent】进行问答
注意，在本例中，我们假设您没有从platform.openai.com获取API密钥，因此禁用了跟踪。
如果您有API密钥，您可以选择设置`OPENAI_API_KEY`环境变量或调用set_tracing_export_api_key()来设置跟踪特定的密钥。
"""


# 3-定义一个工具函数
@function_tool
def init_weather_tool_function(city: str):
    print(f"[debug] getting weather for {city}")
    return f"The weather in {city} is sunny."


async def run_mcp_tool_function():
    # 1-【实例化LLM】ModelProvider对象-并构建RunConfig
    run_config = RunConfig(model_provider=DeepSeekModelProvider(BASE_URL, API_KEY, MODEL_NAME))

    # 2-【实例化Agent】创建一个Agent
    agent = Agent(
        name="Assistant",
        instructions="使用工具回答大模型的问题",
        tools=[init_weather_tool_function])

    # 3.1-调用工具回答问题
    message = "杭州的天气怎么样？"
    print(f"\n\n【大模型请求案例】-> {message}")
    result = await Runner.run(starting_agent=agent, input=message, run_config=run_config)
    print(result.final_output)

    # 3.2-获取Agent对话的结果-没有配置RunConfig使用的是OpenAI的默认模型
    # result = await Runner.run(
    #     agent,
    #     "给我讲一个笑话吧!",
    # )
    # print(result.final_output)


if __name__ == "__main__":
    asyncio.run(run_mcp_tool_function())
